1. Подготовка заглушки
Для начала создаём каталог, где будет лежать наш сайт.
mkdir -p /var/www/html
Далее есть два пути:
- Вариант А (Быстрый): Создать простую страницу командой:
echo "<h1>Site is under construction</h1>" > /var/www/html/index.html
- Вариант Б (Красивый): Загрузить готовый шаблон сайта (index.html, папки img, css) через SFTP (используя FileZilla, WinSCP или MobaXterm ) в папку
/var/www/html/.
Важно: После загрузки файлов любым способом, обязательно обнови права доступа, чтобы Nginx не выдал ошибку 403:
chmod -R 755 /var/www/html
chown -R www-data:www-data /var/www/html
2. Установка и настройка Nginx
Устанавливаем сервер и настраиваем его на работу на внутреннем порту 8888.
apt update && apt install nginx -y
# Создаём конфиг для заглушки
cat <<EOF > /etc/nginx/conf.d/fallback.conf
server {
listen 8888;
server_name server.tonicman.ru; # Твой домен
root /var/www/html;
index index.html;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
try_files \$uri \$uri/ =404;
}
}
EOF
systemctl restart nginx
3. Настройка Firewall (Опционально)
Если на сервере включён фаервол, нужно открыть порты. Если фаервола нет, этот шаг можно пропустить.
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload
4. Настройка 3X-UI (Inbound 443)
Заходим в настройки подключения и заполняем блоки:
Блок Fallbacks (Верхняя часть окна)
Здесь мы указываем, куда отправлять обычных пользователей:
- SNI:
server.tonicman.ru(твой домен) - Alpn: Оставить ПУСТЫМ
- Dest:
8888(локальный порт Nginx)
Блок Security (Нижняя часть окна)
Здесь выбираем один из двух способов работы:Способ А: Обычный TLS (как настроено сейчас)
- Security:
TLS - SNI:
server.tonicman.ru - ALPN:
h2, http/1.1 - Сертификаты: Указать пути к твоим
.crtи.keyфайлам.
Способ Б: REALITY (маскировка под чужой сайт)
- Security:
REALITY - SNI:
google.com(или другой популярный домен) - Dest:
google.com:443 - ALPN:
h2, http/1.1
(Этот способ используется, если у тебя нет своего сертификата или нужно скрыть факт его наличия).
5. Важные примечания
Проверка порта: Если страница не грузится, проверь командой ss -tulnp | grep 443, что порт занят процессом xray, а не nginx.
Протоколы: Если браузер выдаёт ошибку стрима, убедись, что в Fallback очищено поле ALPN.
Перезапуск: После любых изменений в панели 3X-UI обязательно нажимай кнопку Restart Xray.
6. Продвинутый уровень: Создание экосистемы (Multi-Service Config)
Если вы хотите превратить свой сервер в настоящий комбайн и обращаться к разным сервисам через один домен (например, домен.ru/games/ или домен.ru/blog/), используйте эту расширенную конфигурацию Nginx.
Замените содержимое файла
nano /etc/nginx/conf.d/fallback.conf
следующим кодом:
server {
listen 8888;
server_name server.tonicman.ru;
# Отключаем подстановку порта 8888 в автоматических редиректах
port_in_redirect off;
root /var/www/html;
index index.html;
# 1. Основной сайт
location / {
try_files $uri $uri/ =404;
}
# 2. YT Downloader
location /ytdl/ {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Увеличиваем лимит на загрузку файлов (например, для больших cookies.txt)
client_max_body_size 100M;
# Таймауты, чтобы Nginx не обрывал связь при долгой загрузке больших видео
proxy_connect_timeout 900s;
proxy_send_timeout 900s;
proxy_read_timeout 900s;
# Отключаем буферизацию, чтобы прогресс загрузки и поток видео передавались мгновенно
proxy_buffering off;
proxy_request_buffering off;
}
# 3. Статика для блога
location /blog/static/ {
proxy_pass http://127.0.0.1:8081/static/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 4. Блог (основной интерфейс)
location /blog/ {
client_max_body_size 0;
proxy_pass http://127.0.0.1:8081/;
proxy_set_header X-Forwarded-Prefix /blog;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /demo/ {
client_max_body_size 0;
proxy_pass http://127.0.0.1:8082/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /demo;
}
# 6. Визуальный редактор HTML
location /editor/ {
proxy_pass http://127.0.0.1:8083/; # Заменили https на http
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 7. Игры
location /games/ {
proxy_pass http://127.0.0.1:8086/; # Заменили https на http
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Разбор ключевых моментов конфигурации:
port_in_redirect off;– Критически важная опция. Она заставляет Nginx скрывать внутренний порт8888. Без неё при клике на любую ссылку на сайте пользователя будет перекидывать на адрес с двоеточием и портом, который закрыт снаружи.X-Forwarded-Prefix(в блоках/blog/и/demo/) – Сообщает бэкенд-приложению (на FastAPI, Flask или Node.js), что оно теперь работает не в \u00abкорне\u00bb, а внутри подпапки. Это нужно, чтобы ссылки внутри приложения не ломались.- Обработка статики (
/blog/static/) – Иногда приложения требуют отдельного пути для загрузки стилей и скриптов. Этот блок показывает, как проксировать конкретные пути к файлам. client_max_body_size 0;– Отключает лимит на размер передаваемых данных. Это необходимо для работы загрузчиков файлов или облачных хранилищ, чтобы Nginx не обрывал загрузку «тяжёлых» данных.- Локальные порты (
8000,8081и т.д.) – Все эти сервисы должны быть запущены на сервере и слушать127.0.0.1. Снаружи они будут доступны только через ваш домен и 443 порт.